<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue中动画封装</title>  
    <script src="./vue.js"></script>
    <style>
        .v-enter,.v-leave-to{
            opacity: 0;
        }
        .v-enter-active,.v-leave-active{
            transition: opacity 2s;
        }
    </style>
</head>
<body>
    <div id="root">
        <fade :show='show'>
            <div>Hello world</div>
        </fade>
        <fade :show='show'>
            <h1>Hello world</h1>
        </fade>
        <button @click=handleBtnClick>切换按钮</button>
    </div>
    <script>
        Vue.component('fade',{
            props:['show'],
            template:`
                <transition @before-enter='handleBeforeEnter' @enter='handleEnter'>
                        <slot v-if='show'></slot>
                </transition>
                    `,
            methods:{
                handleBeforeEnter:function(el){
                    el.style.color = 'red';
                },
                handleEnter:function(el,done){
                    setTimeout(() => {
                        el.style.color = 'green';
                        done()
                    },2000)
                }
            }
        })
        var vm = new Vue({
            el:'#root',
            data:{
                show:true
            },
            methods:{
                handleBtnClick:function(){
                    this.show = !this.show
                }
            }
        })
    </script>
</body>
</html>